// url拼接参数
export function getUrl(url, obj) {
  let result = ''
  for (let item in obj) {
    if (obj[item]) {
      result += `&${item}=${encodeURIComponent(obj[item])}`
    }
  }
  if(url.indexOf('?') < 0){
    return url + '?' + result.slice(1)
  }else{
    return url + result;
  }
}

// 格式化时间
export function dateFormat (timestamp, type = 2) {
  let formats = {
    '1': 'Y-m-d',
    '2': 'Y-m-d H:i:s',
    '3': 'Y年m月d日',
    '4': 'Y年m月d日 H时i分',
  }[type]

  let zero = function (value) {
    if (value < 10) {
      return '0' + value;
    }
    return value;
  };

  let myDate = timestamp ? (new Date(timestamp)) : new Date();

  let year = myDate.getFullYear();
  let month = zero(myDate.getMonth() + 1);
  let day = zero(myDate.getDate());

  let hour = zero(myDate.getHours());
  let minite = zero(myDate.getMinutes());
  let second = zero(myDate.getSeconds());

  return formats.replace(/Y|m|d|H|i|s/ig, function (matches) {
    return ({
      Y: year,
      m: month,
      d: day,
      H: hour,
      i: minite,
      s: second
    })[matches];
  });
};

// 深克隆
export function clone(Obj) {
  var buf
  if (Obj instanceof Array) {
    buf = [] // 创建一个空的数组
    var i = Obj.length
    while (i--) {
      buf[i] = clone(Obj[i])
    }
    return buf
  } else if (Obj instanceof Object) {
    buf = {} // 创建一个空对象
    for (var k in Obj) { // 为这个对象添加新的属性
      buf[k] = clone(Obj[k])
    }
    return buf
  } else {
    return Obj
  }
}

// 深克隆完整版
export function deepClone(target, cache = new Map()) {
  if (cache.get(target)) {
    return cache.get(target)
  }
  if (target instanceof Object) {
    let dist;
    if (target instanceof Array) {
      // 拷贝数组
      dist = [];
    } else if (target instanceof Function) {
      // 拷贝函数
      dist = function () {
        return target.call(this, ...arguments);
      };
    } else if(target instanceof RegExp){
      // 拷贝正则表达式
      dist = new RegExp(target.source, target.flags);
    } else if (target instanceof Date) {
      dist = new Date(target);
    } else {
      // 拷贝普通对象
      dist = {};
    }
    // 将属性和拷贝后的值作为一个map
    cache.set(target, dist);
    for (let key in target) {
      // 过滤掉原型身上的属性
      if (target.hasOwnProperty(key)) {
        dist[key] = deepClone(target[key], cache);
      }
    }
    return dist;
  }else{
    return target;
  }
}


// js限制输入两位小数
export function clearNoNum(obj) {
  obj = obj.replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
  obj = obj.replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
  obj = obj.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
  obj = obj.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3') // 只能输入两个小数
  if (obj.indexOf('.') < 0 && obj != '') { // 以上已经过滤，此处控制的是如果没有小数点，首位不能为类似于 01、02的金额
    obj = parseFloat(obj)
  }
}
